home *** CD-ROM | disk | FTP | other *** search
/ Wonky Flux Batch 2019 02 / Wonky_Flux_Batch_2019-02.zip / Wonky Flux Batch 2019-02 / 092 - EBU.dsk / GAMES / TIC.TAC.TOE.bas < prev   
BASIC Source File  |  2019-02-17  |  7KB  |  317 lines

  1. 5  REM   /BLANK0.j/Fixing/ttt<CTRL-J>Vers MCMLXIIVXIV<CTRL-J>Fixed Jul 13th, 1987<CTRL-J>JPE<CTRL-J>
  2. 7  REM    Revised  15-Jul-87  :  For Player Selection<CTRL-J>
  3. 10  SPEED= 255: TEXT : HOME : PRINT  CHR$(4);"pr#3": PRINT  CHR$(18)
  4. 30  DIM TC(3,3),OK(9,3),T(3,3),P(2),DI(4,2),PL(8,3),NW(2),P$(2),OC$(3),SC(2)
  5. 40  FOR R = 1 TO 3
  6. 50  FOR C = 1 TO 3
  7. 60  READ T(R,C)
  8. 70  NEXT C
  9. 80  NEXT R
  10. 90  DATA 2,3,2,3,1,3,2,3,2
  11. 100  FOR DN = 1 TO 4
  12. 110  FOR DV = 1 TO 2
  13. 120  READ DI(DN,DV)
  14. 130  NEXT DV
  15. 140  NEXT DN
  16. 150  DATA          0,1,1,1,1,0,1,-1
  17. 160  FOR PN = 1 TO 8
  18. 170  FOR PA = 1 TO 3
  19. 180  READ PL(PN,PA)
  20. 190  NEXT PA
  21. 200  NEXT PN
  22. 210  DATA     1,1,1,1,1,2,1,1,3,1,2,3,1,3,3,1,3,4,2,1,1,3,1,1  
  23. 220  REM 
  24. 230 OC$(1) = "-"
  25. 240 OC$(2) = "X"
  26. 250 OC$(3) = "O"
  27. 260 P$(1) = "Master"
  28. 270 P$(2) = "COMPUTER"
  29. 280 SC(1) = 0
  30. 290 SC(2) = 0
  31. 300 TG = 0
  32. 310  REM 
  33. 320  REM 
  34. 330 P(1) = 1
  35. 340 P(2) = 2
  36. 345  GOSUB 3000
  37. 350  GOTO 390
  38. 360 PS = P(1)
  39. 370 P(1) = P(2)
  40. 380 P(2) = PS
  41. 390  PRINT 
  42. 400  PRINT "TIC-TAC-TOE"
  43. 410 MN = 0
  44. 420  FOR R = 1 TO 3
  45. 430  FOR C = 1 TO 3
  46. 440 TC(R,C) = 0
  47. 450  NEXT C
  48. 460  NEXT R
  49. 470 MN = MN +1
  50. 480 PN = 1
  51. 490 P = 0
  52. 500  GOSUB 2020
  53. 510  PRINT 
  54. 520  PRINT P$(P(PN))" TO MARK AN "OC$(PN +1)
  55. 525  IF JE = 1  THEN  ON P(PN) GOSUB 1000,1000
  56. 530  IF JE = 2  THEN  ON P(PN) GOSUB 820,1000
  57. 535  IF JE = 3  THEN  ON P(PN) GOSUB 820,820
  58. 540 SL = 3
  59. 550 ST = PN
  60. 560  GOSUB 2240
  61. 570  PRINT 
  62. 580  IF N >0  THEN 640
  63. 590  IF MN = 6  THEN 730
  64. 600  IF MN = 5  THEN 690
  65. 610  IF PN = 2  THEN 470
  66. 620 PN = PN +1
  67. 630  GOTO 490
  68. 640 P = NW(N)
  69. 650  GOSUB 2020
  70. 660  PRINT P$(P(PN))" Wins!"
  71. 670 SC(P(PN)) = SC(P(PN)) +1
  72. 680  GOTO 730
  73. 690 P = 0
  74. 700  GOSUB 2020
  75. 710  PRINT " TIE GAME "
  76. 720 TG = TG +1
  77. 730  PRINT 
  78. 735  PRINT : PRINT "Same Game?  Y/N ";: GET YN$: IF YN$ = "Y"  OR YN$ = "y"  THEN  PRINT : GOTO 360
  79. 740  PRINT : PRINT "ENTER 1 FOR NEW GAME, 2 TO QUIT ": GET EN$
  80. 750  IF EN$ < >"1"  AND EN$ < >"2"  THEN 740
  81. 753  LET EN =  VAL(EN$)
  82. 755  IF EN = 1  THEN  GOSUB 3000: GOTO 360
  83. 760  IF EN < >2  THEN 730
  84. 770  PRINT 
  85. 780  PRINT P$(1)" WON "SC(1)
  86. 790  PRINT P$(2)" WON "SC(2)
  87. 800  PRINT " TIE GAMES "TG
  88. 810  PRINT  CHR$(4);"RUNMC,S3,D2": NEW 
  89. 820  PRINT "WHICH CELL? ENTER ROW,COLUMN."
  90. 830  INPUT "(0,0=NEW GAME) ";RM,CM
  91. 840  IF RM = 0  AND CM = 0  THEN 950
  92. 850  IF RM <1  OR RM >3  OR CM <1  OR CM >3  THEN 890
  93. 860  IF TC(RM,CM) = 0  THEN 980
  94. 870  PRINT "NOT AVAILABLE"
  95. 880  GOTO 900
  96. 890  PRINT "INVALID MOVE"
  97. 900  PRINT "THE BOARD LOOKS LIKE THIS:"
  98. 910 P = 0
  99. 920  GOSUB 2020
  100. 930  PRINT "NOW TRY AGAIN"
  101. 940  GOTO 820
  102. 950  PRINT "CANCELLED THAT GAME."
  103. 960 MN = 6
  104. 970  RETURN 
  105. 980 TC(RM,CM) = PN
  106. 990  RETURN 
  107. 1000  IF MN >1  THEN 1210
  108. 1010  IF PN < >1  THEN 1060
  109. 1020  GOSUB 2620
  110. 1030 RM = RT
  111. 1040 CM = CT
  112. 1050  GOTO 1990
  113. 1060 T = T(RM,CM)
  114. 1070  GOSUB 2620
  115. 1080  ON T GOTO 1090,1110,1140
  116. 1090  IF T(RT,CT) = 3  THEN 1070
  117. 1100  GOTO 1180
  118. 1110 RT = 2
  119. 1120 CT = 2
  120. 1130  GOTO 1180
  121. 1140  ON T(RT,CT) GOTO 1180,1150,1170
  122. 1150  IF  ABS(RT -RM) = 2  OR  ABS(CT -CM) = 2  THEN 1070
  123. 1160  GOTO 1180
  124. 1170  IF  ABS(RT -RM) = 1  OR  ABS(CT -CM) = 1  THEN 1070
  125. 1180 RM = RT
  126. 1190 CM = CT
  127. 1200  GOTO 1990
  128. 1210  IF MN >2  THEN 1240
  129. 1220  IF PN = 2  THEN 1340
  130. 1230  GOTO 1500
  131. 1240 ST = PN
  132. 1250 SL = 2
  133. 1260  GOSUB 2240
  134. 1270  IF N = 0  THEN 1340
  135. 1280 M% =  RND(1) *N +1:M = M%
  136. 1290 P = NW(M)
  137. 1300  GOSUB 2480
  138. 1310 RM = RO
  139. 1320 CM = CO
  140. 1330  GOTO 1990
  141. 1340 ST = 3 -PN
  142. 1350 SL = 2
  143. 1360  GOSUB 2240
  144. 1370  IF N = 0  THEN 1430
  145. 1380 P = NW(N)
  146. 1390  GOSUB 2480
  147. 1400 RM = RO
  148. 1410 CM = CO
  149. 1420  GOTO 1990
  150. 1430  IF MN = 2  THEN 1500
  151. 1440 ST = PN
  152. 1450  GOSUB 2660
  153. 1460  IF N < >2  THEN 1500
  154. 1470 RM = RV
  155. 1480 CM = CV
  156. 1490  GOTO 1990
  157. 1500 F = 0
  158. 1510  FOR RM = 1 TO 3
  159. 1520  FOR CM = 1 TO 3
  160. 1530  IF TC(RM,CM) < >0  THEN 1760
  161. 1540 TC(RM,CM) = PN
  162. 1550 ST = PN
  163. 1560 SL = 2
  164. 1570  GOSUB 2240
  165. 1580  IF N = 0  THEN 1680
  166. 1590  IF MN = 2  AND PN = 1  THEN 1720
  167. 1600 P = NW(1)
  168. 1610  GOSUB 2480
  169. 1620 ST = 3 -PN
  170. 1630 TC(RO,CO) = ST
  171. 1640 SL = 2
  172. 1650  GOSUB 2240
  173. 1660 TC(RO,CO) = 0
  174. 1670  GOTO 1710
  175. 1680  IF MN = 2  AND PN = 1  THEN 1750
  176. 1690 ST = 3 -PN
  177. 1700  GOSUB 2660
  178. 1710  IF N = 2  THEN 1750
  179. 1720 F = F +1
  180. 1730 OK(F,1) = RM
  181. 1740 OK(F,2) = CM
  182. 1750 TC(RM,CM) = 0
  183. 1760  NEXT CM
  184. 1770  NEXT RM
  185. 1780 SL = 2
  186. 1790 ST = 3 -PN
  187. 1800  FOR CN = 1 TO F
  188. 1810 TC(OK(CN,1),OK(CN,2)) = PN
  189. 1820  GOSUB 2240
  190. 1830 TC(OK(CN,1),OK(CN,2)) = 0
  191. 1840 OK(CN,3) = M
  192. 1850  NEXT CN
  193. 1860  IF F < >1  THEN 1890
  194. 1870 CN = 1
  195. 1880  GOTO 1970
  196. 1890 SM = 1
  197. 1900  FOR IT = 2 TO F
  198. 1910  IF OK(SM,3) <OK(IT,3)  THEN 1930
  199. 1920 SM = IT
  200. 1930  NEXT IT
  201. 1940 CN% =  RND(1) *F +1:CN = CN%
  202. 1950  IF OK(CN,3) = OK(SM,3)  THEN 1970
  203. 1960  GOTO 1940
  204. 1970 RM = OK(CN,1)
  205. 1980 CM = OK(CN,2)
  206. 1990 TC(RM,CM) = PN
  207. 1993  IF RM = 0  OR CM = 0  THEN 1000
  208. 1995  NOTRACE 
  209. 2000  PRINT "COMPUTER TAKES ROW "RM" COLUMN "CM"
  210. 2010  RETURN 
  211. 2020 QR = PL(P,1)
  212. 2030 QC = PL(P,2)
  213. 2040 DN = PL(P,3)
  214. 2050 QL = 0
  215. 2060  PRINT 
  216. 2070  FOR QI = 1 TO 3
  217. 2080  PRINT  TAB( 3);
  218. 2090  FOR QJ = 1 TO 3
  219. 2100  IF QL = 3  OR QI < >QR  OR QJ < >QC  THEN 2180
  220. 2110  FLASH : REM   TURNS ON BLINKING
  221. 2120  PRINT OC$(TC(QI,QJ) +1);
  222. 2130  NORMAL : REM   RESTORES NORMAL
  223. 2140 QR = QR +DI(DN,1)
  224. 2150 QC = QC +DI(DN,2)
  225. 2160 QL = QL +1
  226. 2170  GOTO 2190
  227. 2180  PRINT OC$(TC(QI,QJ) +1);
  228. 2190  PRINT "  ";
  229. 2200  NEXT QJ
  230. 2210  PRINT 
  231. 2220  NEXT QI
  232. 2230  RETURN 
  233. 2240 N = 0
  234. 2250 M = 0
  235. 2260  FOR P = 1 TO 8
  236. 2270 RU = PL(P,1)
  237. 2280 CU = PL(P,2)
  238. 2290 DN = PL(P,3)
  239. 2300 NF = 0
  240. 2310 MF = 0
  241. 2320  FOR CE = 1 TO 3
  242. 2330  IF TC(RU,CU) = 0  THEN 2380
  243. 2340  IF TC(RU,CU) = ST  THEN 2370
  244. 2350 MF = MF +1
  245. 2360  GOTO 2380
  246. 2370 NF = NF +1
  247. 2380 RU = RU +DI(DN,1)
  248. 2390 CU = CU +DI(DN,2)
  249. 2400  NEXT CE
  250. 2410  IF NF < >SL  OR MF >0  THEN 2440
  251. 2420 N = N +1
  252. 2430 NW(N) = P
  253. 2440  IF MF >0  THEN 2460
  254. 2450 M = M +1
  255. 2460  NEXT P
  256. 2470  RETURN 
  257. 2480 RO = 0
  258. 2490 CO = 0
  259. 2500  REM 
  260. 2505 RT = PL(P,1)
  261. 2510 CT = PL(P,2)
  262. 2520 DN = PL(P,3)
  263. 2530  FOR CE = 1 TO 3
  264. 2540  IF TC(RT,CT) < >0  THEN 2580
  265. 2550 RO = RT
  266. 2560 CO = CT
  267. 2570 CE = 3
  268. 2580 RT = RT +DI(DN,1)
  269. 2590 CT = CT +DI(DN,2)
  270. 2600  NEXT CE
  271. 2610  RETURN 
  272. 2620 RT% =  RND(1) *3 +1:RT = RT%
  273. 2630 CT% =  RND(1) *3 +1:CT = CT%
  274. 2640  IF TC(RT,CT) < >0  THEN 2620
  275. 2650  RETURN 
  276. 2660  FOR RB = 1 TO 3
  277. 2670  FOR CB = 1 TO 3
  278. 2680  IF TC(RB,CB) < >0  THEN 2780
  279. 2690 SL = 2
  280. 2700 TC(RB,CB) = ST
  281. 2710  GOSUB 2240
  282. 2720 TC(RB,CB) = 0
  283. 2730  IF N <2  THEN 2780
  284. 2740 RV = RB
  285. 2750 CV = CB
  286. 2760 CB = 3
  287. 2770 RB = 3
  288. 2780  NEXT CB
  289. 2790  NEXT RB
  290. 2800  RETURN 
  291. 3000  REM     Subrs for Number of Players<CTRL-J><CTRL-J>
  292. 3005 D$ =  CHR$(4)
  293. 3010  PRINT : PRINT "Number of Players?  0 = Computer VS Computer"
  294. 3020  PRINT "                    1 = Human VS Computer"
  295. 3030  PRINT "                    2 = Human VS Human   ";: GET JE$
  296. 3040 JE =  VAL(JE$): IF JE < >0  AND JE < >1  AND JE < >2  THEN 3010
  297. 3050 JE = JE +1
  298. 3070  ON JE GOSUB 3200,3400,3600
  299. 3090  RETURN 
  300. 3200  REM      Subr. For Computer VS Computer<CTRL-J>
  301. 3210 P$(1) = "Apple IIc"
  302. 3220 P$(2) = "COMPUTER"
  303. 3230  RETURN 
  304. 3400  REM    Subr. For Human VS Computer   (you can't beat me!)<CTRL-J>
  305. 3405  PRINT 
  306. 3410  INPUT "Players Name? ";P$(1)
  307. 3420 P$(2) = "Apple IIc"
  308. 3430  PRINT 
  309. 3440  RETURN 
  310. 3600  REM      Subr. For Human VS Human<CTRL-J>
  311. 3608  PRINT 
  312. 3610  INPUT "First Players Name? ";P$(1)
  313. 3620  PRINT 
  314. 3630  INPUT "Second Players Name? ";P$(2)
  315. 3640  PRINT 
  316. 3660  RETURN 
  317. 3670  REM  <CTRL-J>John P. Edwards    15-Jul-87<CTRL-J>